package com.ruoyi.system.service.impl;

import java.util.List;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.DrugInfo;
import com.ruoyi.system.mapper.DrugInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.DrugInMapper;
import com.ruoyi.system.domain.DrugIn;
import com.ruoyi.system.service.IDrugInService;
import org.springframework.web.bind.annotation.PostMapping;

/**
 * 药品入库Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-06-25
 */
@Service
public class DrugInServiceImpl implements IDrugInService 
{
    @Autowired
    private DrugInMapper drugInMapper;
    /**
     * 查询药品入库
     * 
     * @param drugBill 药品入库主键
     * @return 药品入库
     */
    @Override
    public DrugIn selectDrugInByDrugBill(String drugBill)
    {
        return drugInMapper.selectDrugInByDrugBill(drugBill);
    }

    /**
     * 查询药品入库列表
     * 
     * @param drugIn 药品入库
     * @return 药品入库
     */
    @Override
    public List<DrugIn> selectDrugInList(DrugIn drugIn)
    {
        return drugInMapper.selectDrugInList(drugIn);
    }

    /**
     * 新增药品入库
     * 
     * @param drugIn 药品入库
     * @return 结果
     */
    @Override
    public int insertDrugIn(DrugIn drugIn)
    {
        drugIn.setCreateTime(DateUtils.getNowDate());
        return drugInMapper.insertDrugIn(drugIn);
    }

    /**
     * 修改药品入库
     * 
     * @param drugIn 药品入库
     * @return 结果
     */
    @Override
    public int updateDrugIn(DrugIn drugIn)
    {
        return drugInMapper.updateDrugIn(drugIn);
    }

    /**
     * 批量删除药品入库
     * 
     * @param drugBills 需要删除的药品入库主键
     * @return 结果
     */
    @Override
    public int deleteDrugInByDrugBills(String[] drugBills)
    {
        return drugInMapper.deleteDrugInByDrugBills(drugBills);
    }

    /**
     * 删除药品入库信息
     * 
     * @param drugBill 药品入库主键
     * @return 结果
     */
    @Override
    public int deleteDrugInByDrugBill(String drugBill)
    {
        return drugInMapper.deleteDrugInByDrugBill(drugBill);
    }

    @Autowired
    private DrugInfoMapper drugInfoMapper;

    @Override
    public int insertDrugInAndUpdateDrugInfo(DrugIn drugIn) {
        // 先插入入库信息
        int result = drugInMapper.insertDrugIn(drugIn);
        if (result > 0) {
            // 插入成功后，查询drug_info表中的当前药品信息
            DrugInfo drugInfo = drugInfoMapper.selectDrugInfoByDrugId(drugIn.getDrugId());

            // 计算新的药品数量
            long newQuantity = drugInfo.getNum() + drugIn.getPurchaseQuantity();

            // 更新drug_info表中的数量
            drugInfo.setNum(newQuantity);
            drugInfoMapper.updateDrugInfoQuantity(drugInfo);

            // 根据新的数量判断是否需要更新状态
            if (newQuantity > drugInfo.getWarnValue()) {
                drugInfo.setStatus("正常");
                drugInfoMapper.updateDrugInfoStatus(drugInfo);
            }
        }
        return result;
    }
}
